import base64
import pickle

from django_redis import get_redis_connection


def merge_cart_cookie_to_redis(request, response):
    """合并购物车数据"""
    # 当cookie中有的数据刚好以redis一样时，以cookie为准；
    # 获取购物车的数据如果没有购物车数据，直接结束；
    cart_str = request.COOKIES.get('carts')
    if cart_str:
        cart_dict = pickle.loads(base64.b64decode(cart_str.encode()))
    else:
        return
    # 如果有购物车数据：
    # 1）连接redis对象；
    redis_conn = get_redis_connection('carts')
    pl = redis_conn.pipeline()
    user = request.user
    # 2）将cookie的数据中的sku_id与count写入redis的hash当中；
    for sku_id in cart_dict:
        pl.hset('carts_%s'% user.id,sku_id, cart_dict[sku_id]['count'])
    # 3）如果是已勾选，将sku设置进set，如无则删除；
        if cart_dict[sku_id]['selected']:
            pl.sadd('selected_%s' % user.id, sku_id)
        else:
            pl.srem('selected_%s' % user.id, sku_id)
    pl.execute()
    # 清除cookies中原来的数据；
    response.delete_cookie('carts')